Oracleのデータは、最初にTimesTenにロードされキャッシュ・グループに移入されます。キャッシュ・グループへのロードが終了したら、そのキャッシュ・データは、TimesTenキャッシュ・グループとOracleデータベースのいずれでも更新できます。Cache Connectでは、キャッシュ・グループからOracleへの更新の伝播とOracleからキャッシュ・グループへのリフレッシュを、いずれも自動的に実行できます。
図9.2 データのロードおよび更新の伝播/リフレッシュ
次のメカニズムを使用して、TimesTenキャッシュ・グループを、Orable実表の最新状態と同じ状態に維持できます。
各リフレッシュ・メカニズムにはメリットとデメリットがあります。増分自動リフレッシュでは変更のあった行のみがリフレッシュされますが、更新を常時監視するにはOracleでのトリガーの使用が必要です。このため、オーバーヘッドが増え、更新が遅くなります。完全自動リフレッシュでは、Oracleで更新を常時監視する必要はありませんが、キャッシュ内であらゆるものが一度に更新されます。手動リフレッシュは、アプリケーションで制御されるリフレッシュで、リフレッシュを実行するタイミングを決定するために必要なロジックによって、アプリケーションのオーバーヘッドが増えます。
様々な状況で、この3種類のリフレッシュ・メカニズムは有効です。たとえば、Oracle表の更新が1日に1度のみ行われ、更新される行数が多い場合は、完全自動リフレッシュが最適です。Oracle表の更新頻度は高いものの、それぞれの更新で変更される行数が少ない場合は、増分自動リフレッシュが最適です。また、リフレッシュを実行する必要のあるタイミングがアプリケーションのロジックで既知の場合は、手動リフレッシュが最適です。
TimesTenキャッシュ・グループで更新されるデータについては、次のメカニズムを使用することで、Oracleデータベースの状態を最新のキャッシュ・グループと同じ状態に維持できます。
PROPAGATEオプションを有効にすると、キャッシュ・グループに対するすべての変更が自動的にOracleデータベースに伝播されます。PROPAGATEオプションが有効になっている1つ以上のキャッシュ・グループ、またはSWTキャッシュ・グループの1つ以上のキャッシュ・グループを変更したトランザクションをアプリケーションで終了した場合、TimesTenはまずOracleでトランザクションをコミットし、次にTimesTenでコミットします。この方法では、Oracleが常に最新のデータのイメージを反映できるように、データがTimesTenでコミットされる前に、Oracleはデータに関係する必要なロジックを適用できます。PROPAGATEオプションまたはSWTキャッシュ・グループは、キャッシュとOracleを常に同期する必要がある場合に使用します。
AWTキャッシュ・グループへの変更は、Oracleへの適用を待機せずにコミットされます。AWTキャッシュ・グループは、レスポンス時間が短くパフォーマンスも良好ですが、変更は非同期でOracleに適用されるため、キャッシュとOracleのデータは必ずしも同一ではありません。
TimesTenアプリケーションでは、TimesTenへの単一接続を介して、TimesTenキャッシュ・グループまたはOracleデータベースのいずれかにSQL文を送信できます。このような単一接続は、図9.3に示すパススルー機能で、SQL文はTimesTenのキャッシュ表でローカルに処理できるのか、またはOracleに転送する必要があるのかをチェックすることによって使用可能になります。パススルー機能の設定では、パススルーの対象とする文の種類とそれを実行する状況が指定されます。
図9.3 TimesTenパススルー機能
パススルー機能の具体的な動作は、データ・ストア属性PassThroughで制御されます。この動作は、PassThroughフラグを指定してttOptSetFlagプロシージャをコールすることで、プログラムで再設定できます。